package com.hxkj.service.impl;


import com.hxkj.dao.SiteUniversalDao;
import com.hxkj.domain.enums.UniversalExceptionEnum;
import com.hxkj.domain.po.SiteUniversal;
import com.hxkj.service.UniversalService;
import com.platform.common.domain.exception.CustomException;
import com.platform.common.domain.exception.CustomMessageException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 网站管理实现类
 * <p>
 * Created by yaosy on 2018年6月14日20:04:05
 */
@Service
@Slf4j
public class UniversalServiceImpl implements UniversalService {


    @Autowired
    private SiteUniversalDao siteUniversalDao;

    @Autowired
    private RedisTemplate redisTemplate;



    public SiteUniversal save(SiteUniversal siteUniversal) {
        SiteUniversal site = new SiteUniversal();
        try{
            //根据名字查询是否重复
            site.setWebsiteName(siteUniversal.getWebsiteName());
            List<SiteUniversal> siteUniversalList = siteUniversalDao.get(site);
            site = new SiteUniversal();
            site.setWebsiteName(siteUniversal.getWebsiteName());
            site.setId(siteUniversal.getId());
            site.setWebsiteList(siteUniversal.getWebsiteList());
            site.setLogo1(siteUniversal.getLogo1());
            site.setLogo2(siteUniversal.getLogo2());
            site.setHoteline(siteUniversal.getHoteline());
            site.setCustomer(siteUniversal.getCustomer());
            site.setWebchartCard(siteUniversal.getWebchartCard());
            site.setMcrioBlog(siteUniversal.getMcrioBlog());
            site.setVersioninfo(siteUniversal.getVersioninfo());
            site.setOtherinformation(siteUniversal.getOtherinformation());
            site.setRemark(siteUniversal.getRemark());
            site.setSeotitle(siteUniversal.getSeotitle());
            site.setSeodescptition(siteUniversal.getSeodescptition());
            site.setCreateTime(System.currentTimeMillis());
            site.setTagsTempletId(siteUniversal.getTagsTempletId());
            site.setTempletId(siteUniversal.getTempletId());
            site.setmTempletId(siteUniversal.getmTempletId());
            site.setSiteId(siteUniversal.getSiteId());
            site.setSeokeyword(siteUniversal.getSeokeyword());
            siteUniversalDao.save(site);
            redisTemplate.opsForValue().set("UNIVERAL_SITE" + siteUniversal.getSiteId(),site);
        }catch(Exception e){
            e.printStackTrace();
        }
        return site;
    }



    @Override
    public SiteUniversal modify(SiteUniversal siteUniversal) throws Exception {
        try{
            SiteUniversal param = new SiteUniversal();
            param.setSiteId(siteUniversal.getSiteId());
            List<SiteUniversal> siteUniversalList =  siteUniversalDao.get(param);
            if(siteUniversalList.size()>0){
                SiteUniversal siteUniversalData= siteUniversalList.get(0);
                siteUniversalData.setWebsiteName(siteUniversal.getWebsiteName());
                siteUniversalData.setWebsiteList(siteUniversal.getWebsiteList());
                siteUniversalData.setLogo1(siteUniversal.getLogo1());
                siteUniversalData.setLogo2(siteUniversal.getLogo2());
                siteUniversalData.setHoteline(siteUniversal.getHoteline());
                siteUniversalData.setCustomer(siteUniversal.getCustomer());
                siteUniversalData.setWebchartCard(siteUniversal.getWebchartCard());
                siteUniversalData.setMcrioBlog(siteUniversal.getMcrioBlog());
                siteUniversalData.setVersioninfo(siteUniversal.getVersioninfo());
                siteUniversalData.setOtherinformation(siteUniversal.getOtherinformation());
                siteUniversalData.setRemark(siteUniversal.getRemark());
                siteUniversalData.setSeotitle(siteUniversal.getSeotitle());
                siteUniversalData.setSeodescptition(siteUniversal.getSeodescptition());
                siteUniversalData.setSeokeyword(siteUniversal.getSeokeyword());
                siteUniversalData.setTagsTempletId(siteUniversal.getTagsTempletId());
                siteUniversalData.setTempletId(siteUniversal.getTempletId());
                siteUniversalData.setmTempletId(siteUniversal.getmTempletId());
                siteUniversalData.setId(siteUniversal.getId());
                siteUniversalDao.update(siteUniversalData);
                redisTemplate.opsForValue().set("UNIVERAL_SITE" + siteUniversal.getSiteId(),siteUniversalData);
            }
        }catch(Exception e){
            e.printStackTrace();
            throw new CustomException(UniversalExceptionEnum.UNIVERSAL_EDIT_FAILED);
        }
        return null;
    }





   @Override
    public SiteUniversal get(SiteUniversal siteUniversal) throws Exception {
       SiteUniversal result = null;
        try{
            // 如果缓存中有站点信息,直接从缓存中获取
            if (redisTemplate.hasKey("UNIVERAL_SITE" + siteUniversal.getSiteId())) {
                try {
                    Object obj = redisTemplate.opsForValue().get("UNIVERAL_SITE" + siteUniversal.getSiteId());
                    log.debug(obj.getClass().getName()+":"+obj);
                    return (SiteUniversal)obj;
                }catch (Exception e){
                    // redis里取值出错,直接从db中取
                    log.warn("从redis缓存中取值出错",e);
                }
            }
            SiteUniversal universal = new SiteUniversal();
            universal.setSiteId(siteUniversal.getSiteId());
            List<SiteUniversal> siteUniversalList =  siteUniversalDao.get(universal);
            if(siteUniversalList == null || siteUniversalList.size() == 0){//如果不存在数据,则新增一条数据
                return this.save(siteUniversal);
            }

            List<SiteUniversal> siteUniversalList1 =  siteUniversalDao.get(siteUniversal);
            if(siteUniversalList1.size()>0) {
                result = convert(siteUniversalList1.get(0));
                redisTemplate.opsForValue().set("UNIVERAL_SITE" + siteUniversal.getSiteId(),result);
                return result;
            }
        }catch(Exception e){
            e.printStackTrace();
            throw  new CustomMessageException(400,"查询站点信息出错");
        }
        return null;
    }



    protected SiteUniversal convert(SiteUniversal siteUniversal){
        SiteUniversal site = new SiteUniversal();
        site.setWebsiteId(siteUniversal.getWebsiteId());
        site.setWebsiteName(siteUniversal.getWebsiteName()==null?"":siteUniversal.getWebsiteName());
        site.setId(siteUniversal.getId());
        site.setWebsiteList(siteUniversal.getWebsiteList()==null?"":siteUniversal.getWebsiteList());
        site.setLogo1(siteUniversal.getLogo1()==null?"":siteUniversal.getLogo1());
        site.setLogo2(siteUniversal.getLogo2()==null?"":siteUniversal.getLogo2());
        site.setHoteline(siteUniversal.getHoteline()==null?"":siteUniversal.getHoteline());
        site.setCustomer(siteUniversal.getCustomer()==null?"":siteUniversal.getCustomer());
        site.setWebchartCard(siteUniversal.getWebchartCard()==null?"":siteUniversal.getWebchartCard());
        site.setMcrioBlog(siteUniversal.getMcrioBlog()==null?"":siteUniversal.getMcrioBlog());
        site.setVersioninfo(siteUniversal.getVersioninfo()==null?"":siteUniversal.getVersioninfo());
        site.setOtherinformation(siteUniversal.getOtherinformation()==null?"":siteUniversal.getOtherinformation());
        site.setRemark(siteUniversal.getRemark()==null?"":siteUniversal.getRemark());
        site.setSeotitle(siteUniversal.getSeotitle()==null?"":siteUniversal.getSeotitle());
        site.setSeodescptition(siteUniversal.getSeodescptition()==null?"":siteUniversal.getSeodescptition());
        site.setCreateTime(siteUniversal.getCreateTime()== null?0:siteUniversal.getCreateTime());
        site.setSiteId(siteUniversal.getSiteId());
        site.setTagsTempletId(siteUniversal.getTagsTempletId());
        site.setTempletId(siteUniversal.getTempletId());
        site.setmTempletId(siteUniversal.getmTempletId());
        site.setSiteId(siteUniversal.getSiteId());
        site.setSeokeyword(siteUniversal.getSeokeyword()==null?"":siteUniversal.getSeokeyword());
        return site;
    }

    @Override
    public List<SiteUniversal> getList(SiteUniversal siteUniversal) throws Exception {
        return siteUniversalDao.get(siteUniversal);
    }

}
